package com.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.UserBean;

/**
 * 用户业务接口
 */

public interface IUserService {
    /**
     * 登陆校验，成功返回登陆对象，同时封装该用户的所有权限，并且记录登陆日志，登陆失败则返回null
     * @param userName 用户名
     * @param pwd 用户密码
     * @return 用户对象
     */
    UserBean login(String userName, String pwd);

    /**
     * 动态条件分页查询
     * @param pageNO 页码
     * @param userName 用户名
     * @return 分页对象(编号、用户名、密码、真实姓名)
     */
    IPage<UserBean> findByItem(Integer pageNO, String userName);

    /**
     * 查询该用户是否存在，如果存在，返回false
     * 如果不存在，添加用户，同时添加该用户拥有的角色
     * @param user 用户对象
     * @param roleIdArray 角色数组
     */
    boolean add(UserBean user,Integer[] roleIdArray);

    /**
     * 通过id删除用户
     * 先判断是否是登录用户，如果是登录用户直接返回false
     * 如果并非当前登录用户，则先删除该用户对应的角色（中间表记录），再进行用户表的信息删除
     * @param id 编号
     * @param loginUser 登陆对象
     * @return 删除是否成功
     */
    boolean del(Integer id,UserBean loginUser);

    /**
     * 通过id查询用户，同时连表查询该用户拥有的角色集合和权限集合
     * @param id 编号
     * @return 用户对象（编号、用户名、密码、真实姓名、拥有角色集合、拥有权限集合）
     */
    UserBean findById(Integer id);

    /**
     * 通过id修改用户/角色中间表信息
     * 先该编号的中间表信息进行清空，然后再重新进行中间表信息的添加
     * @param id 编号
     * @param roleId 角色id数组
     */
    void updateRoles(Integer id, Integer[] roleId);

    /**
     * 通过编号更新密码
     * @param id 用户编号
     * @param pwd 新密码
     */
    void updatePwd(Integer id, String pwd);
}
